package logica.DAO;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import objetosNegocio.ListaProveedores;
import objetosNegocio.Proveedor;

public class DAOProveedor implements InterfazDAOProveedor{
	
	private DAOConnection connection; //Conexion a BBDD
	
	/**
	 * @param connection - Objeto que encapsula la conexion a la bbdd
	 */
	public DAOProveedor(DAOConnection connection){
		this.connection = connection;
	}

	@Override
	public boolean insertarRegistro(Proveedor datos) throws SQLException {
		boolean insertado = false;
		Statement stmt = null;
				
		String sentenciaSQL = "";  		//Siempre se inserta el cliente como activo (valor 0)
		sentenciaSQL =	"INSERT INTO gesal.Proveedor (idProveedor,nombre,cif,activo,direccion,poblacion,codPostal,telefono,email,comentarios) VALUES (";
		sentenciaSQL+= "NULL," + "\"" + datos.getNombre() +  "\",\"" + datos.getCif() + "\",0,\""; 
		sentenciaSQL+= datos.getDireccion() + "\",\"" + datos.getPoblacion() + "\",\"" + datos.getCodPostal() + "\",\"";  
		sentenciaSQL+= datos.getTelefono() + "\",\"" + datos.getEmail() + "\",\"" + datos.getComentarios() + "\")"; 
		
		stmt = connection.getConnection().createStatement();
		if ((stmt.executeUpdate(sentenciaSQL))==1) insertado=true;
		stmt.close();
		
		return insertado;
	}

	@Override
	public boolean modificarRegistro(Proveedor datos) throws SQLException {
		boolean modificado = false;
		Statement stmt = null;
		
		int activo = datos.getActivo()? 0 : 1; //Pasamos de boolean a int
		
		String sentenciaSQL = "";
		sentenciaSQL = "UPDATE gesal.Proveedor SET";
		sentenciaSQL+= " nombre=\"" + datos.getNombre() + "\",";
		sentenciaSQL+= " cif=\"" + datos.getCif() + "\",";
		sentenciaSQL+= " telefono=\"" + datos.getTelefono() + "\",";
		sentenciaSQL+= " email=\"" + datos.getEmail() + "\",";
		sentenciaSQL+= " direccion=\"" + datos.getDireccion() + "\",";
		sentenciaSQL+= " poblacion=\"" + datos.getPoblacion() + "\",";
		sentenciaSQL+= " codPostal=\"" + datos.getCodPostal() + "\",";
		sentenciaSQL+= " comentarios=\"" + datos.getComentarios() + "\",";
		sentenciaSQL+= " activo=\"" + activo + "\"";
		sentenciaSQL+= " WHERE idProveedor=" + datos.getIdProveedor();
		
		stmt = connection.getConnection().createStatement();
		if ((stmt.executeUpdate(sentenciaSQL))==1) modificado=true;
		stmt.close();
		
		return modificado;
	}

	@Override
	public boolean bajaRegistro(int codigo) throws SQLException {
		boolean baja = false;
		Statement stmt = null;
		
		String sentenciaSQL = "";
		sentenciaSQL = "UPDATE gesal.Proveedor SET activo=1 WHERE idProveedor=" + codigo;
		
		stmt = connection.getConnection().createStatement();
		if ((stmt.executeUpdate(sentenciaSQL))==1) baja=true;
		stmt.close();

		return baja;
	}

	@Override
	public Proveedor obtenerRegistro(int codigo) throws SQLException {
		ResultSet resul = null;
		Statement stmt = null;
		Proveedor datos = null;
		
		String sentenciaSQL = "";
		sentenciaSQL = "SELECT idProveedor,nombre,cif,activo,direccion,poblacion,codPostal,telefono,email,comentarios";
		sentenciaSQL+= " FROM gesal.Proveedor WHERE idProveedor=" + codigo;
		
		stmt = connection.getConnection().createStatement();
		resul = stmt.executeQuery(sentenciaSQL);
		
		//Si se encuentra el registro se tratan los datos
		if (resul.next()){  
			datos= new Proveedor();	
			datos.setIdProveedor(resul.getInt("idProveedor"));
			datos.setNombre(resul.getString("nombre"));
			datos.setCif(resul.getString("cif"));
			datos.setActivo((resul.getInt("activo")==0));
			datos.setDireccion(resul.getString("direccion"));
			datos.setPoblacion(resul.getString("poblacion"));
			datos.setCodPostal(resul.getString("codPostal"));
			datos.setTelefono(resul.getString("telefono"));
			datos.setEmail(resul.getString("email"));
			datos.setComentarios(resul.getString("comentarios"));
		}
		
		resul.close();
		stmt.close();
	
		return datos;		
	}

	@Override
	public ListaProveedores obtenerListaRegistros() throws SQLException {
		return obtenerListado(false);
	}
	
	@Override
	public ListaProveedores obtenerListaRegistrosActivos() throws SQLException {
		return obtenerListado(true);
	}
	
	
	private ListaProveedores obtenerListado(boolean soloActivos) throws SQLException{
		ResultSet resul = null;
		Statement stmt = null;
		
		Proveedor datos = null;
		ListaProveedores listado = new ListaProveedores();
		
		String sentenciaSQL = "";
		sentenciaSQL = "SELECT idProveedor,nombre,cif,activo,direccion,poblacion,codPostal,telefono,email,comentarios FROM gesal.Proveedor";
		
		if (soloActivos)
			sentenciaSQL+= " WHERE activo=0";
		
		stmt = connection.getConnection().createStatement();
		resul = stmt.executeQuery(sentenciaSQL);
		
		
		//Si se encuentra el registro se tratan los datos
		while (resul.next()){  
			datos= new Proveedor();	
			datos.setIdProveedor(resul.getInt("idProveedor"));
			datos.setNombre(resul.getString("nombre"));
			datos.setCif(resul.getString("cif"));
			datos.setActivo((resul.getInt("activo")==0));
			datos.setDireccion(resul.getString("direccion"));
			datos.setPoblacion(resul.getString("poblacion"));
			datos.setCodPostal(resul.getString("codPostal"));
			datos.setTelefono(resul.getString("telefono"));
			datos.setEmail(resul.getString("email"));
			datos.setComentarios(resul.getString("comentarios"));
			listado.add(datos);
		}
		
		resul.close();
		stmt.close();
		return listado;
		
		
	}
}
